/*
 * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @Date: 2025-02-15 09:22:42
 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @LastEditTime: 2025-02-15 21:49:38
 * @FilePath: /2024-4-20-pipe/sign_test/sig.cc
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */


#include <iostream>
#include <csignal>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <set>

using namespace std;

void handler(int sig)
{
    cout << "get sig: " << sig << endl;
    sleep(1);
}

int main()
{
    signal(8, handler);

    int a = 5 / 0;

    return 0;
}


// void handler(int sig)
// {
//     cout << "get sig: " << sig << endl;
//     exit(1);
// }

// int main()
// {
//     signal(SIGALRM, handler);
//     alarm(1);

//     int i = 0;
//     while(true)
//     {
//         cout << i++ << endl;
//     }

//     return 0;
// }



// int main()
// {
//     abort();
    
//     return 0;
// }


// void handler(int sig)
// {
//     cout << "get sig: " << sig << endl;
//     exit(1);
// }

// int main()
// {
//     signal(2, handler);

//     int cnt = 5;
//     while (cnt)
//     {
//         cout << "I am a process cnt = " << cnt-- << endl;
//         sleep(1);
//     }

//     raise(2);

//     return 0;
// }



// void handler(int sig)
// {
//     cout << "get sig: " << sig << endl;
//     exit(1);
// }

// int main()
// {
//     signal(2, handler);

//     while (true)
//     {
//         cout << "pid = " << getpid() << endl;
//         sleep(1);
//     }

//     return 0;
// }


// void handler(int sig)
// {
//     cout<<" get a sig : "<< sig <<endl;
//     exit(1);
// }
// int main ()
// {
//     pid_t id=fork();
//     if(id==0)
//     {
//         signal(2,handler);

//         while(true)
//         {
//             cout<< " i am a child process... "<<endl;
//             sleep(1);
//         }
//     }
//     sleep(5);
//     kill(id,2);//给子进程发送2号信号！
    
//     return 0;
// }



// void handler(int sig)
// {
//     cout << "get sig: " << sig << endl;
// }

// int main()
// {
//     signal(2, handler);

//     while(true)
//     {
//         cout << "hello world!" << endl;
//         sleep(1);
//     }

//     return 0;
// }





// // 信号处理函数，用于打印进程ID
// void print_pid(int signum) {
//     pid_t pid = getpid();
//     std::cout << "Process ID: " << pid << std::endl;
// }

// // 信号处理函数，用于处理被阻塞的信号（这里不会真正处理，只是作为占位符）
// void ignored_handler(int signum) {
//     // 不做处理
// }

// int main() {
//     // 设置SIGUSR2信号的处理函数，用于打印进程ID
//     signal(SIGUSR2, print_pid);

//     // 阻塞2号信号（SIGINT）和40号信号（SIGUSR1）
//     sigset_t set;
//     sigemptyset(&set); // 初始化信号集为空集
//     sigaddset(&set, SIGINT); // 添加SIGINT到信号集
//     sigaddset(&set, SIGUSR1); // 添加SIGUSR1到信号集

//     if (sigprocmask(SIG_BLOCK, &set, nullptr) == -1) {
//         perror("sigprocmask");
//         return 1;
//     }

    
//     std::cout << "Sending SIGUSR2 to get PID (for demonstration purposes only, not a standard approach)" << std::endl;
//     print_pid(SIGUSR2); 

    
//     std::cout << "Simulating sending 5 SIGINT signals and 5 SIGUSR1 signals..." << std::endl;
//     for (int i = 0; i < 5; ++i) {
//         // 这些kill调用实际上不会触发信号处理程序，因为信号被阻塞了
//         kill(getpid(), SIGINT);   // 发送SIGINT信号给当前进程（被阻塞）
//         kill(getpid(), SIGUSR1);  // 发送SIGUSR1信号给当前进程（被阻塞）
//     }

    
    
//     while (true) {
//         sleep(1);
//     }

//     return 0; // 这行代码实际上永远不会被执行到，因为程序进入了无限循环。
// }




// // 自定义信号处理函数
// void sigcb(int signum) 
// {
//     std::cout << "Caught signal: " << signum << std::endl;
// }
 
// int main() 
// {
//     struct sigaction sa;
//     memset(&sa, 0, sizeof(sa)); // 初始化sigaction结构体为0
 
//     // 设置信号处理函数
//     sa.sa_handler = sigcb;

//     // 注册信号处理函数
//     if (sigaction(SIGINT, &sa, nullptr) == -1) {
//         perror("sigaction");
//         exit(EXIT_FAILURE);
//     }
 
//     std::cout << "Press Ctrl+C to trigger SIGINT signal..." << std::endl;
 
//     // 无限循环，等待信号到来
//     while (true) {
//         sleep(1);
//     }
 
//     // 注意：由于设置了信号处理函数，这里的return语句实际上可能永远不会被执行到，
//     // 除非程序以其他方式（如调用exit）退出。
//     return 0;
// }


// void sigcb(int signum)
// {
//     cout<<"Catch the sign : "<< signum<<endl;
//     exit(signum);
// } 
// int main()
// {
//     signal(SIGINT,sigcb);

//     cout << "Press Ctrl+C to trigger SIGINT signal..." << endl;

//     while(true)
//     {
//         sleep(1);
//     }
//     return 0;
// }